package com.cetc;

import org.junit.Test;

import java.io.*;
import java.util.Properties;

/**
 * @Classname ClassLoaderTest
 * @Description 类加载器的测试, 其中包括引导类加载器/扩展类加载器/系统类加载器
 * 1⃣️引导类加载器用于加载Java平台的核心库
 * 2⃣️扩展类加载器用于加载jre/lib/ext目录下的jar包
 * 3⃣️系统类加载器是系统类的加载器，是最常用的类加载器
 * @Date 2022/11/29 20:19
 * @Created by louzhuangxi
 */
public class ClassLoaderTest {

    @Test
    public void test01() {
        //对于自定义类，使用系统类加载器进行加载
        ClassLoader loader = ClassLoaderTest.class.getClassLoader();
        System.out.println(loader);
        //获取父类加载器
        System.out.println(loader.getParent());
        //获取祖父类加载器，引导类加载器是无法获取到的
        System.out.println(loader.getParent().getParent());
        System.out.println(String.class.getClassLoader());
    }

    /**
     * 加载配置文件
     */
    @Test
    public void test02() {
        Properties prop = new Properties();
        try {
            FileInputStream fis = new FileInputStream("src/main/resources/jdbc.properties");
            prop.load(fis);
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(prop);
    }
    /**
     * 使用类加载器加载配置文件
     */
    @Test
    public void test03(){
        ClassLoader classLoader = ClassLoaderTest.class.getClassLoader();
        //当前的相对路径是相对于源码文件夹src或者资源文件夹resources而言的
        InputStream is = classLoader.getResourceAsStream("jdbc.properties");
        Properties prop = new Properties();
        try {
            prop.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(prop);
    }
}
